#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define ll long long
#define H_W_Y

int read(){
  int x=0,f=1;char ch=getchar();
  while(!isdigit(ch)){if(ch=='-') f=-1;ch=getchar();}
  while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
  return x*f;
}

const int N=6e6+5;
int n,m,idx=0,l,sx,sy,tx,ty,S,T,dis[N],mp[N];
vector<int> G[N];
bool vis[N];

int id(int x,int y,int op=0){return op*n*m+(x-1)*m+y;}
void add(int u,int v){
  //cerr<<"Add( "<<u<<" , "<<v<<" ) "<<endl;
  G[u].pb(v),G[v].pb(u);
}

void dij(){
  priority_queue<pair<int,int> > Q;
  memset(dis,0x3f,sizeof(dis));
  dis[S]=0,Q.push({0,S});
  while(!Q.empty()){
    int u=Q.top().second;Q.pop();
	if(vis[u]) continue;
	vis[u]=true;
	//cerr<<"dis( "<<u<<" ) = "<<dis[u]<<endl;
    for(auto v:G[u]){
	  int w=(n*m<v&&2*n*m>=v);
	  if(dis[v]>dis[u]+w) dis[v]=dis[u]+w,Q.push({-dis[v],v});
	}
  }
}

int main(){
  #ifdef H_W_Y
  freopen("stamp.in","r",stdin);
  freopen("stamp.out","w",stdout);
  #endif
  n=read(),m=read(),l=read(); 
  sx=read(),sy=read(),tx=read(),ty=read();
  S=0,T=n*m*2+1;
  for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++){
	  char ch=getchar();
	  while(ch!='#'&&ch!='.') ch=getchar();
	  mp[id(i,j)]=ch=='#';
	}
  for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++){
	  if(!mp[id(i,j)]){
		if(i>1&&!mp[id(i-1,j)]) add(id(i,j),id(i-1,j));
		if(j>1&&!mp[id(i,j-1)]) add(id(i,j),id(i,j-1));
		if(i<n) for(int k=max(j-l+1,1);k<=j;k++) add(id(i,j),id(i+1,k,1));
		if(j<m) for(int k=max(i-l+1,1);k<=i;k++) add(id(i,j),id(k,j+1,1));
	  }
	  if(i+l<=n){
	    for(int k=max(j-l+1,1);k<=min(m,j+l-1);k++) add(id(i,j,1),id(i+l,k,1));
	    for(int k=j;k<=min(m,j+l-1);k++) if(!mp[id(i+l,k)]) add(id(i,j,1),id(i+l,k));
	  }
	  if(j+l<=m){
		for(int k=max(i-l+1,1);k<=min(n,i+l-1);k++) add(id(i,j,1),id(k,j+l,1));
	    for(int k=i;k<=min(n,i+l-1);k++) add(id(i,j,1),id(k,j+l));
	  }
	}
  if(!mp[id(sx,sy)]) add(S,id(sx,sy));
  for(int i=max(1,sx-l+1);i<=sx;i++)
    for(int j=max(1,sy-l+1);j<=sy;j++)
      add(S,id(i,j,1));

  if(!mp[id(tx,ty)]) add(id(tx,ty),T);
  for(int i=max(1,tx-l+1);i<=tx;i++)
    for(int j=max(1,ty-l+1);j<=ty;j++)
	  add(id(i,j,1),T);

  dij();
  cout<<dis[T]<<'\n';
  return 0;
}